home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / ISO_SRC.ZIP / LIBRARY.ZIP / KEYTRAP.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-06-08  |  2.2 KB  |  146 lines

  1. /*  ERROR CHECK FOR DEFINES */
  2. #ifdef COMPILER_BORLAND
  3.   #ifdef COMPILER_WATCOM
  4.     #error MUST USE ONLY ONE COMPILER_ OPTION
  5.   #endif
  6. #else
  7.   #ifndef COMPILER_WATCOM
  8.     #error MUST USE COMPILER_ OPTION
  9.   #endif
  10. #endif
  11.  
  12. #ifdef COMPILER_BORLAND
  13.  
  14. char key_press[128];
  15. char key_lock[128];
  16. char key_installed=0;
  17.  
  18. void key_trap();
  19. void key_untrap();
  20.  
  21. void interrupt key_interrupt();
  22. void interrupt (*key_old_interrupt)();
  23.  
  24. void key_trap()
  25. {
  26.   memset(key_press,0,128);
  27.   memset(key_lock,0,128);
  28.  
  29.   if(key_installed)
  30.     return;
  31.  
  32.   key_old_interrupt = _dos_getvect(9);
  33.   _dos_setvect(9,key_interrupt);
  34.  
  35.   key_installed=1;
  36. }
  37.  
  38. void key_untrap()
  39. {
  40.   if(key_installed)
  41.     _dos_setvect(9,key_old_interrupt);
  42.   key_installed=0;
  43. }
  44.  
  45. void interrupt key_interrupt()
  46. {
  47.   char c;
  48.  
  49.   c=inp(0x60);
  50.  
  51.   // pressed or released a key?
  52.   if(c<128) {
  53.     if(!key_lock[c]) {
  54.       key_press[c]=1;
  55.     }
  56.   } else {
  57.     key_press[c-128]=0;
  58.     key_lock[c-128]=0;
  59.   }
  60.  
  61.   // clear the interrupt
  62.   c=inp(0x61);
  63.   outp(0x61,c | 0x80);
  64.   outp(0x61,c);
  65.  
  66.   // and finally acknowledge the PIC
  67.   outp(0x20,0x20);
  68. }
  69.  
  70. keylock(signed short int n)
  71. {
  72.   key_lock[n]=1;
  73.   key_press[n]=0;
  74. }
  75.  
  76. #endif
  77.  
  78.  
  79.  
  80.  
  81. #ifdef COMPILER_WATCOM
  82.  
  83. char key_press[128];
  84. char key_lock[128];
  85. char key_installed=0;
  86.  
  87. void key_trap();
  88. void key_untrap();
  89.  
  90. void __interrupt __far key_interrupt();
  91. void (__interrupt __far *key_old_interrupt)();
  92.  
  93. void key_trap()
  94. {
  95.   memset(key_press,0,128);
  96.   memset(key_lock,0,128);
  97.  
  98.   if(key_installed)
  99.     return;
  100.  
  101.   key_old_interrupt = _dos_getvect(0x09);
  102.   _dos_setvect(9,key_interrupt);
  103.  
  104.   key_installed=1;
  105. }
  106.  
  107. void key_untrap()
  108. {
  109.   if(key_installed)
  110.     _dos_setvect(9,key_old_interrupt);
  111.   key_installed=0;
  112. }
  113.  
  114. void __interrupt __far key_interrupt()
  115. {
  116.   char c,t;
  117.  
  118.   c=inp(0x60);
  119.  
  120.   // pressed or released a key?
  121.   if(c<128) {
  122.     if(!key_lock[c]) {
  123.       key_press[c]=1;
  124.     }
  125.   } else {
  126.     key_press[c-128]=0;
  127.     key_lock[c-128]=0;
  128.   }
  129.  
  130.   // clear the interrupt
  131.   c=inp(0x61);
  132.   outp(0x61,c | 0x80);
  133.   outp(0x61,c);
  134.  
  135.   // and finally acknowledge the PIC
  136.   outp(0x20,0x20);
  137. }
  138.  
  139. keylock(signed short int n)
  140. {
  141.   key_lock[n]=1;
  142.   key_press[n]=0;
  143. }
  144.  
  145. #endif
  146.